//
//  ViewController.m
//  DrawDemo
//
//  Created by ZJ on 2018/8/3.
//  Copyright © 2018年 iCatch Technology Inc. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIView *showView;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self test7];
}

// 屏幕截图
- (void)test7 {
    // 开启图片类型的图形上下文
    UIGraphicsBeginImageContextWithOptions(self.showView.frame.size, NO, 0);
    
    // 获取当前上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 截图 把 view 的内容 放到上下文中 然后渲染
    [self.showView.layer renderInContext:ctx];
    
    // 获取截图的图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭上下文
    UIGraphicsEndImageContext();
    
    self.imageView.image = image;
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;
}

// 给图片加水印
- (void)test6 {
    // 获取图片
    UIImage *image = [UIImage imageNamed:@"scene"];
    
    // 开启图片类型的图形上下文
    UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
    
    // 画大图
    [image drawAtPoint:CGPointZero];
    
    // 水印文字
    NSString *str = @"风儿飘";
    
    // 画文字水印
    [str drawAtPoint:CGPointMake(10, 10) withAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:20]}];
    
    // 水印图片
    UIImage *logo = [UIImage imageNamed:@"me"];
    
    // 画水印图片
    // [logo drawAtPoint:CGPointMake(image.size.width * 0.6, image.size.height * 0.7)];
    [logo drawInRect:CGRectMake(image.size.width * 0.7, image.size.height * 0.7, logo.size.width * 0.4, logo.size.height * 0.4)];
    
    // 获取画好的图片
    image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭图片类型的图形上下文
    UIGraphicsEndImageContext();
    
    self.imageView.image = image;
}

// 带圆环的图片
- (void)test5 {
    // 获取图片
    UIImage *image = [UIImage imageNamed:@"me"];
    
    // 设置边距
    CGFloat margin = 20;
    
    // 计算图片类型的图形上下文大小
    CGSize ctxSize = CGSizeMake(image.size.width + 2 * margin, image.size.height + 2 * margin);
    
    // 开启图片类型的图形上下文
    UIGraphicsBeginImageContextWithOptions(ctxSize, NO, 0);
    
    // 获取当前上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 计算圆心
    CGPoint arcCenter = CGPointMake(ctxSize.width * 0.5, ctxSize.height * 0.5);
    
    // 计算半径
    CGFloat radius =  (image.size.width + margin) * 0.5; // ctxSize.width * 0.5;
    
    // 画圆环
    CGContextAddArc(ctx, arcCenter.x, arcCenter.y, radius, 0, 2 * M_PI, 1);
    
    // 设置圆环宽度
    CGContextSetLineWidth(ctx, margin);
    
    // 渲染圆环
    CGContextStrokePath(ctx);
    
    // 画头像显示区域
    CGContextAddArc(ctx, arcCenter.x, arcCenter.y, image.size.width * 0.5, 0, 2 * M_PI, 1);
    
    // 裁剪头像显示区域
    CGContextClip(ctx);
    
    // 画图片
    [image drawAtPoint:CGPointMake(margin, margin)];
    
    // 获取图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭图片类型的图形上下文
    UIGraphicsEndImageContext();
    
    self.imageView.image = newImage;
}

// 把裁剪后的图片保存到相册
- (void)test4 {
    // 获取图片
    UIImage *image = [UIImage imageNamed:@"me"];
    
    // 开启图片类型的图形上下文
    UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
    
    // 获取当前上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 画一个裁剪的图形
    CGContextAddArc(ctx, image.size.width * 0.5, image.size.height * 0.5, image.size.width * 0.5, 0, 2 * M_PI, 1);
    
    // 裁剪
    CGContextClip(ctx);
    
    // 把图片画到图形上
    [image drawAtPoint:CGPointZero];
    
    // 获取裁剪后的图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭图像上下文
    UIGraphicsEndImageContext();
    
    self.imageView.image = newImage;
    
    // 把裁剪后的图片保存到相册
    UIImageWriteToSavedPhotosAlbum(newImage, self, @selector(image:didFinishSavingWithError:contextInfo:), @"1234567890");
}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
    NSLog(@"Save finish - info: %@", contextInfo);
}

// 裁剪圆形图片
- (void)test3 {
    // 获取图片
    UIImage *image = [UIImage imageNamed:@"me"];
    
    // 开启图片类型的图形上下文
    UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
    
    // 获取上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 画一个裁剪的图片
    CGContextAddArc(ctx, image.size.width * 0.5, image.size.height * 0.5, image.size.width * 0.5, 0, 2 * M_PI, 1);
    
    // 裁剪
    CGContextClip(ctx);
    
    // 把图片画上去
    [image drawAtPoint:CGPointZero];
    
    // 获取图片
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭图像类型的图形上下文
    UIGraphicsEndImageContext();
    
    self.imageView.image = newImage;
}

// 图片类型的图形上下文 把UIImage保存到沙盒
- (void)test2 {
    // 开启图片类型的图形上下文
    // UIGraphicsBeginImageContext(CGSizeMake(300, 300));
    // 参数：大小    透明度（不透明）     缩放（0）
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 300), NO, 0);
    
    // UIGraphicsBeginImageContext(CGSizeMake(300, 300)); <==> UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 300), NO, 1);
    
    // 获取当前的上下文（图片类型）
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 拼接路径 同时 把路径添加到上下文中
    CGContextMoveToPoint(ctx, 50, 50);
    CGContextAddLineToPoint(ctx, 250, 250);
    
    // 渲染
    CGContextStrokePath(ctx);
    
    // 通过图片类型的图形上下文 获取图片对象
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭图片类型的图形上下文
    UIGraphicsEndImageContext();
    
    // 把获取到的图片 放到 图片框中
    self.imageView.image = image;
    
    // 获取 doc 路径
    NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    
    // 获取文件路径
    NSString *filePath = [docPath stringByAppendingPathComponent:@"xxx.jpeg"];
    
    // 把 image 对象转化成 NSData 对象
    // NSData *data = UIImagePNGRepresentation(image);
    NSData *data = UIImageJPEGRepresentation(image, 0);
    // 通过 data 的 write to file 写入到沙盒中
    [data writeToFile:filePath atomically:YES];
}

// 图片类型的图形上下文
- (void)test1 {
    // 开启图片类型的图形上下文
    // UIGraphicsBeginImageContext(CGSizeMake(300, 300));
    // 参数：大小    透明度（不透明）     缩放（0）
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 300), NO, 0);
    
    // UIGraphicsBeginImageContext(CGSizeMake(300, 300)); <==> UIGraphicsBeginImageContextWithOptions(CGSizeMake(300, 300), NO, 1);
    
    // 获取当前的上下文（图片类型）
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 拼接路径 同时 把路径添加到上下文中
    CGContextMoveToPoint(ctx, 50, 50);
    CGContextAddLineToPoint(ctx, 250, 250);
    
    // 渲染
    CGContextStrokePath(ctx);
    
    // 通过图片类型的图形上下文 获取图片对象
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭图片类型的图形上下文
    UIGraphicsEndImageContext();
    
    // 把获取到的图片 放到 图片框中
    self.imageView.image = image;
}

@end
